package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomFlag;
import br.com.telescope.adsrt.dom.DomInteger;
import br.com.telescope.adsrt.dom.DomText;
import br.com.telescope.adsrt.dom.DomTextLong;
import br.com.telescope.adsrt.lib.*;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.feature.CustomFeature;
import br.com.telescope.t2.feature.MethodFeature;
import solutions.ferpa.ztest.ent.*;

/**
 * Configurações do sistema de autenticação.
 * <p>
 * Interface para atualizar as preferências e mensagens utilizadas nas 
 * telas para criar conta e ativar conta.
 * <P>
 * Telescope origin: RTAUTH.CFG_AUTH
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class CfgAuth extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "RTAUTH.CFG_AUTH";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Configurações do sistema de autenticação");
    }
    
    
    // Record items
    private DomFlag aCriarContaUsuario;
    private DomFlag aRecuperarSenha;
    private DomText aAlterarSenhaSubjectEmail;
    private DomTextLong aAlterarSenhaCorpoEmail;
    private DomText aSucessoAoEnviarEmailRecuperarSenha;
    private DomInteger aDiasExpirarSenhaInicial;
    private DomInteger aDiasExpirarSenha;
    
    // Query items
    
    @Override
    public void initAttributes() {
        
        aCriarContaUsuario = new DomFlag();
        aCriarContaUsuario.context(ctx).name("CRIAR_CONTA_USUARIO").label("Criar conta usuário?").unbound(true);
        aCriarContaUsuario.setDefaultValue("N");
        
        aRecuperarSenha = new DomFlag();
        aRecuperarSenha.context(ctx).name("RECUPERAR_SENHA").label("Recuperar senha?").unbound(true);
        aRecuperarSenha.setDefaultValue("N");
        
        aAlterarSenhaSubjectEmail = new DomText();
        aAlterarSenhaSubjectEmail.context(ctx).name("ALTERAR_SENHA_SUBJECT_EMAIL").label("Alterar senha subject email").width(40).unbound(true);
        
        aAlterarSenhaCorpoEmail = new DomTextLong();
        aAlterarSenhaCorpoEmail.context(ctx).name("ALTERAR_SENHA_CORPO_EMAIL").label("Alterar senha corpo email").unbound(true);
        
        aSucessoAoEnviarEmailRecuperarSenha = new DomText();
        aSucessoAoEnviarEmailRecuperarSenha.context(ctx).name("SUCESSO_AO_ENVIAR_EMAIL_RECUPERAR_SENHA").label("Sucesso ao enviar email recuperar senha").width(60).unbound(true);
        
        aDiasExpirarSenhaInicial = new DomInteger();
        aDiasExpirarSenhaInicial.context(ctx).name("DIAS_EXPIRAR_SENHA_INICIAL").label("Dias para expirar senha inicial").unbound(true);
        
        aDiasExpirarSenha = new DomInteger();
        aDiasExpirarSenha.context(ctx).name("DIAS_EXPIRAR_SENHA").label("Dias para expirar senha").unbound(true);
        
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="CUSTOM">
    public class FCustom extends CustomFeature {
        
        @Override
        public void initForm() {
            addField(aCriarContaUsuario, "opt");
            addField(aRecuperarSenha, "opt");
            addField(aAlterarSenhaSubjectEmail, "opt");
            addField(aAlterarSenhaCorpoEmail, "opt");
            addField(aSucessoAoEnviarEmailRecuperarSenha, "opt");
            addField(aDiasExpirarSenhaInicial, "opt");
            addField(aDiasExpirarSenha, "opt");
        }
        
        @Override
        public void preDisplay() {
            try {
                lerConfiguracoes();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        @Override
        public void onAction() {
            addSubmit(getFeature("SALVAR_CONFIGURACOES")).label("Salvar");
        }
        
        {
            setFeatureName("CUSTOM");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="SALVAR_CONFIGURACOES">
    public class FSalvarConfiguracoes extends MethodFeature {
        
        @Override
        public void run() {
            preRun();
            try {
                salvarConfiguracoes();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("SALVAR_CONFIGURACOES");
            setTitle("Salvar");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FCustom());
        addFeature(new FSalvarConfiguracoes());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "CUSTOM";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    public String getCriarContaUsuario() {
        return aCriarContaUsuario.getValue();
    }
    
    public void setCriarContaUsuario(String value) {
        this.aCriarContaUsuario.setValue(value);
    }
    
    public String getRecuperarSenha() {
        return aRecuperarSenha.getValue();
    }
    
    public void setRecuperarSenha(String value) {
        this.aRecuperarSenha.setValue(value);
    }
    
    public String getAlterarSenhaSubjectEmail() {
        return aAlterarSenhaSubjectEmail.getValue();
    }
    
    public void setAlterarSenhaSubjectEmail(String value) {
        this.aAlterarSenhaSubjectEmail.setValue(value);
    }
    
    public String getAlterarSenhaCorpoEmail() {
        return aAlterarSenhaCorpoEmail.getValue();
    }
    
    public void setAlterarSenhaCorpoEmail(String value) {
        this.aAlterarSenhaCorpoEmail.setValue(value);
    }
    
    public String getSucessoAoEnviarEmailRecuperarSenha() {
        return aSucessoAoEnviarEmailRecuperarSenha.getValue();
    }
    
    public void setSucessoAoEnviarEmailRecuperarSenha(String value) {
        this.aSucessoAoEnviarEmailRecuperarSenha.setValue(value);
    }
    
    public Integer getDiasExpirarSenhaInicial() {
        return aDiasExpirarSenhaInicial.getValue();
    }
    
    public void setDiasExpirarSenhaInicial(Integer value) {
        this.aDiasExpirarSenhaInicial.setValue(value);
    }
    
    public Integer getDiasExpirarSenha() {
        return aDiasExpirarSenha.getValue();
    }
    
    public void setDiasExpirarSenha(Integer value) {
        this.aDiasExpirarSenha.setValue(value);
    }
    // </editor-fold>
    
    /**
     * Ler configurações.
     * <p>
     * Le os parâmetros das preferences e atribui aos campos
     */
    private void lerConfiguracoes() throws AdsException {
        // <user-code id="796759" parentId="796755" hashcode="-76bf3538" length="601">
        aRecuperarSenha.setValue(ctx.getPreference("RTAUTH.RECOVERY_PASSWORD"));
        aCriarContaUsuario.setValue(ctx.getPreference("RTAUTH.CREATE_ACCOUNT"));
        aAlterarSenhaSubjectEmail.setValue(ctx.getPreference("RTAUTH.ALT_PASSWORD_EMAIL_SUBJECT"));
        aAlterarSenhaCorpoEmail.setValue(ctx.getPreference("RTAUTH.ALT_PASSWORD_EMAIL_BODY"));
        aSucessoAoEnviarEmailRecuperarSenha.setValue(ctx.getPreference("RTAUTH.SUCCESS_SEND_EMAIL"));
        aDiasExpirarSenha.setValue(ctx.getPreference("RTAUTH.PASSWORD_EXPIRATION_DAYS"));
        aDiasExpirarSenhaInicial.setValue(ctx.getPreference("RTAUTH.NEW_PASSWORD_EXPIRATION_DAYS"));
        
        // </user-code>
    }
    
    /**
     * Salvar.
     */
    private void salvarConfiguracoes() throws AdsException {
        // <user-code id="796804" parentId="796799" hashcode="-45229d1d" length="866">
        ctx.setPreference("RTAUTH.RECOVERY_PASSWORD", ctx.getParameter("A_RECUPERAR_SENHA"));
        ctx.setPreference("RTAUTH.CREATE_ACCOUNT", ctx.getParameter("A_CRIAR_CONTA_USUARIO"));
        ctx.setPreference("RTAUTH.ALT_PASSWORD_EMAIL_SUBJECT", ctx.getParameter("A_ALTERAR_SENHA_SUBJECT_EMAIL"));
        ctx.setPreference("RTAUTH.ALT_PASSWORD_EMAIL_BODY", ctx.getParameter("A_ALTERAR_SENHA_CORPO_EMAIL"));
        ctx.setPreference("RTAUTH.SUCCESS_SEND_EMAIL", ctx.getParameter("A_SUCESSO_AO_ENVIAR_EMAIL_RECUPERAR_SENHA"));
        ctx.setPreference("RTAUTH.PASSWORD_EXPIRATION_DAYS", ctx.getParameter("A_DIAS_EXPIRAR_SENHA"));
        ctx.setPreference("RTAUTH.NEW_PASSWORD_EXPIRATION_DAYS", ctx.getParameter("A_DIAS_EXPIRAR_SENHA_INICIAL"));
        
        ctx.showSuccess(message("RTAUTH.SFG_AUTH.SUCCESS_SAVE", "Configurações salvas com sucesso"));
        gotoFeature(getFirstFeature(CustomFeature.class), getRecord());
        
        // </user-code>
    }
}
